|
Boolean operation to distinguish all logically discrete components of a two wireframe interaction |
Wireframe Extract Separate
To access this dialog:
-
Activate the Structure ribbon and select Operations | Boolean | Extract Separate
-
Run the commandwireframe-extract-separate
Creates separate wireframes for each logically discrete piece of data formed by the interaction of two wireframe data collections. Two separate data are input to this command, and each output represents one interconnected surface from the original objects; however original surfaces may have been divided by intersection with the other object’s wireframe. Inputs can either be loaded wireframe objects or collections of preselected wireframe triangle data.
The Extract Separate command will attempt to classify each new wireframe data surface with respect to the other wireframe data. Each surface may be classified as being Inside, Outside, or On the other wireframe object. This classification method makes use of the face direction stored for each triangle within the wireframe.
Note: This command supports flexible wireframe selection.
When considering closed volume inputs:
- Inside will be within the interior of the volume
- On will coincide exactly with part of the volume surface.
- Outside will be within the exterior of the volume
When considering open surfaces, such as DTM data:
- Inside will be under the DTM
- On will coincide exactly with part of the DTM surface.
- Outside will be above the DTM
If choosing wireframe object inputs, at least two must exist in memory before this command can be run. If using Selected triangle data, data must be selected and committed to the command using the corresponding Store current selection button before executing the command.
Creating “custom” Boolean combinations
The Extract Separate command can be used to create customised combinations of wireframe data, including the standard Boolean combinations (Union, Intersection and Difference). This can be done by filtering the Single Object Output data or by manually combining the various output objects when Single Object Output has not been specified. Commonly, you will want to define results based on the input data (1) where its components fall relative to the other input data (2). To make this easier, 6 Output options can be used in combination to specify which items should be written to the output:
-
Wireframe 1 inside Wireframe 2: the output includes elements from Wireframe 1 which fall inside (or below for a DTM) Wireframe 2
-
Wireframe 1 on Wireframe 2: the output includes elements from Wireframe 1 which fall directly on the surface of Wireframe 2
-
Wireframe 1 outside Wireframe 2: the output includes elements from Wireframe 1 which fall outside (or above for a DTM) Wireframe 2
-
Wireframe 2 inside Wireframe 1: the output includes elements from Wireframe 2 which fall inside (or below for a DTM) Wireframe 1
-
Wireframe 2 on Wireframe 1: the output includes elements from Wireframe 2 which fall directly on the surface of Wireframe 1
-
Wireframe 2 outside Wireframe 1: the output includes elements from Wireframe 2 which fall outside (or above for a DTM) Wireframe 1
For example, selecting only the two Outside options will give a result similar to the Boolean Union , whilst selecting only the two Inside options will give a result similar to the Boolean Intersection.
A note about “On”...
The Extract Separate command only produces wireframe data as an output. The On value relates to triangles which fall exactly on the surface of the other source object. It may be easier to think of it as "not inside or outside". With cube and pyramid test data, there is a clean intersection, so everything is either inside or outside (i.e. not ambiguous), and therefore the On option will result in nothing.
The image below shows 2 overlapping boxes (the green is set to transparent to make the overlap clearer):
Selecting On for Wireframe 1 (the red cube), produces the result shown in the accompanying image (both source Wireframes made transparent for a clearer display of the result):
What will an "extract separate" produce?
By default, the process will produce a single new wireframe which may contain elements from both input wireframe data collections. The triangles will be classified using three fields: SURFACE, GROUP and INSIDE. The SURFACE contains an index which is unique for all the triangles belonging to a single interconnected surface. GROUP contains a value of 1 or 2, relating to the number of the input wireframe the triangles were extracted from (i.e. Wireframe 1 or Wireframe 2). INSIDE contains a value which classifies the triangles with respect to the object they were not extracted from (0=outside, 1=inside, 2=on, 3=unknown)
If you elect not to use the Single Object Output option, the Extract Separate command will automatically split the output into separate objects, which may produce a large number of new objects. For this reason, your application will perform a cursory check of the data in question to determine the likely 'load' on your available memory space, and display how many new objects are to be created.
If you choose not to continue, after seeing the potential number of results, you are asked if you would prefer to output simple groups instead. If you choose this option, the command will generate, at most, six objects representing:
-
the part of Wireframe 1 inside Wireframe 2
-
the elements of Wireframe 1 on Wireframe 2
-
the part of Wireframe 1 outside Wireframe 2
-
the part of Wireframe 2 inside Wireframe 1
-
the elements of Wireframe 2 on Wireframe 1
-
the part of Wireframe 2 outside Wireframe 1
If you decide not to continue at this stage, you are offered a final option to default to the single object output (see below). If this option is refused, no objects result from this operation.
Example
The choice of surfaces to be output can be confusing, so consider the following example of a cuboid (Wireframe 1) and a cylinder (Wireframe 2). The table below summarizes the surfaces that will be created for each of the Output check boxes.
Initial objects
The cube object and cylinder are shown above - note that the top surface of Wireframe 2 (the cylinder) is shared with the cube but the bottom end projects below the cube - this is important to demonstrate the difference between the Inside, On and Outside calculations:
Wireframe 1 - Inside Wireframe 2 |
Wireframe 1 - On Wireframe 2 |
Wireframe 1 - Outside Wireframe 2 |
|
|
|
Wireframe 2 - Inside Wireframe 1 |
Wireframe 2 - On Wireframe 1 |
Wireframe 2 - Wireframe Object 1 |
|
|
|
In particular, note the difference between the two images in the central column (the "on" calculations); the spatial data is identical but the attributes for each output represent the attribute (e.g. color) of the first object in the calculation description - object 1 is red, object 2 is green.
Field Details:
Wireframe 1/2: for each wireframe data input you can either choose an existing loaded wireframe object (using the drop-down list provided) or you can select wireframe triangle data in any 3D window, then select the Store current selection for the Wireframe 1 and/or Wireframe 2 inputs.
Keep: allows selection of the components which will be included in the output wireframe(s). See ”Creating “custom” Boolean combinations” above, for more information.
Output: choose how you wish to generate data from this command:
-
Single Object: this option is selected by default and will generate all output surfaces into a single object, distinguishable by the value of the SURFACE attribute. Selecting this option provides two further options:
-
Current object: generate data into the current wireframe object as an output.
-
Any or a new object: generate data in any loaded objects, or by typing a new object name, a new object.
See “What will an "extract separate" produce?” above, for more information on the type of data that is generated. -
Multiple New Objects: select this option to generate one or more new objects, with each containing one element of the extract separate output. Once enabled, you can either select the default prefix of "Extract:" or enter any prefix you like; objects will be generated with the prefix and an ID, e.g. "Extract:1", "Extract:2" and so on.
Before you create the new objects, a message will be displayed to indicate the number of objects that will be created.